Many computing clusters combine reconfigurable processing resources (e.g., single- and multi-core processors in a network or mesh) with reconfigurable resources (e.g., virtual machines, file systems, databases, backup storage, etc.). Many deployments of such computing clusters employ virtual machines that provide computing and storage services to applications. Certain low-level computing and low-level storage capabilities are provided natively by a hypervisor that runs a particular operating system (e.g., a Microsoft operating system). Unfortunately, reliance on the hypervisor and the set of limitations imposed by the underlying operating system imposes severe limitations pertaining to maintaining versions (e.g., snapshots) of certain of these reconfigurable resources. In particular there are many scenarios where the aforementioned applications need storage services that are not provided by the underlying operating system to the degree needed by the applications and/or by system administrators. For example, when an application or system administrator needs to create, store and manage many versions of a file (e.g., snapshots of a file), the limitations of the underlying operating system (e.g., limitations attendant to static allocations, limitations attendant to the number of concurrently stored versions, etc.) prevent the application or system administrators from implementing desired behaviors, such as enabling fast user searches over a set of stored snapshots in order to identify one or more snapshots that contain a particular searched-for text string.
File system filers that have support for file-level version control either keep the versioning metadata as part of the file system hosting the files or, they keep the versioning metadata in a separate storage volume on the same system. In this legacy scenario (e.g., when keeping the versioning metadata as part of the file system), two acute limitations emerge: (1) the versioning metadata is limited to only attributes pertaining to the file system hosting the files, and (2) there is an operating system-dependent limit on the number of versions that can be supported due to space constraints associated with a file volume. In the case of keeping the versioning metadata in a separate storage volume, the many versions of the file are stored in the separate storage volume, and the storage volume grows super-linearly in size with the number of versions of the files being created and maintained. The performance of accesses to the versioning metadata and corresponding versioned data degrades over time due to fragmentation and other undesirable effects that result from indexing a large number of files and/or file changes. Performance degradations are further exacerbated when a single persistently-stored storage object is accessed by two or more systems since the size of the index grows super-linearly in size with respect to the number of systems and their respective system-specific attributes, as well as growing super-linearly in size with respect to the number of versions of the files being created.
The problems associated with the aforementioned legacy approaches are exacerbated for systems that implement virtual machines. A virtual machine often possesses traits that are not present in files, and thus not present in file snapshots. For example a virtual machine possesses not only a storage footprint (e.g., pertaining to storage objects in use), but also virtual machines possess a state footprint (e.g., pertaining to computing resources in use and/or any forms of state variables). Merely storing snapshots that comprise versions of storage objects in use (e.g., files) fails to account for versioning of the state information pertaining to a particular virtual machine. Inasmuch as the legacy approaches fail to account for versioning, state information of virtual machines also means that the legacy approaches fail to provide an index or other mechanism to facilitate system administrative uses or other access to an index that comprises virtual machine snapshot versions. What is needed is a way to provide virtual machine version querying using an index comprising many snapshots of versioned state information derived from snapshotted virtual machines.
What is needed is a technique or techniques to improve over legacy approaches.